package com.pqj.pqaiagent.tool;

import cn.hutool.core.io.FileUtil;
import com.itextpdf.kernel.font.PdfFont;
import com.itextpdf.kernel.font.PdfFontFactory;
import com.itextpdf.kernel.pdf.PdfDocument;
import com.itextpdf.kernel.pdf.PdfWriter;
import com.itextpdf.layout.Document;
import com.itextpdf.layout.element.Paragraph;
import com.pqj.pqaiagent.constant.FileConstant;
import org.springframework.ai.tool.annotation.Tool;
import org.springframework.ai.tool.annotation.ToolParam;

import java.io.IOException;

/**
 * PDF 生成工具 (这是一个PDF 生成工具类)
 */
public class PDFGenerationTool {


    @Tool(description = "Generate a PDF file with given content", returnDirect = false)  // 标记为工具方法，描述为"用给定内容生成PDF文件"
    public String generatePDF(
            @ToolParam(description = "Name of the file to save the generated PDF") String fileName,  // 参数1：PDF文件名
            @ToolParam(description = "Content to be included in the PDF") String content) {  // 参数2：PDF内容
        String fileDir = FileConstant.FILE_SAVE_DIR + "/pdf";   // 构建PDF文件存储目录路径
        String filePath = fileDir + "/" + fileName;  // 拼接完整的PDF文件路径
        try {
            // 创建目录
            FileUtil.mkdir(fileDir);
            // 创建 PdfWriter 和 PdfDocument 对象
            try (PdfWriter writer = new PdfWriter(filePath); // 创建PDF文件写入器
                 PdfDocument pdf = new PdfDocument(writer); // 创建PDF文档对象
                 Document document = new Document(pdf)) { // 创建PDF布局文档对象
                // 自定义字体（需要人工下载字体文件到特定目录）
//                String fontPath = Paths.get("src/main/resources/static/fonts/simsun.ttf")
//                        .toAbsolutePath().toString();
//                PdfFont font = PdfFontFactory.createFont(fontPath,
//                        PdfFontFactory.EmbeddingStrategy.PREFER_EMBEDDED);
                // 使用内置中文字体
                PdfFont font = PdfFontFactory.createFont("STSongStd-Light", "UniGB-UCS2-H");
                document.setFont(font);   // 设置文档默认字体
                // 创建段落
                Paragraph paragraph = new Paragraph(content);  // 用输入内容创建段落
                // 添加段落并关闭文档
                document.add(paragraph);   // 将段落添加到PDF文档
            } // 自动关闭writer、pdf和document资源
            return "PDF generated successfully to: " + filePath; // 返回成功信息及文件路径
        } catch (IOException e) {
            return "Error generating PDF: " + e.getMessage();  // 捕获异常并返回错误信息
        }
    }
}
